第1週 Hello, World!
環境構築が終わってない人は環境構築を参照しながらやってください。 分からなければ上回生がサポートします。
本日の内容
0. ターミナルの扱い方について
1. Hello, World!
2. 出力
3. 変数
0. ターミナルの扱い方について
1-1
Hello, World!とは、プログラマが新しい言語に入門したときにとりあえず実行するプログラムで、端末などにHello, World!という文字列を出力するという儀式です。とくに意味はありませんがしきたりにしたがってC言語班でもHello, World!を行います。
https://gyazo.com/b350418ab29db9e736a1d69e8df4d34f
cdで今作ったディレクトリに入りましょう。
https://gyazo.com/a7edd121755191fb3d3b1ea352f3d772
ここから、Hello, World!を行うプログラムhello.cを書いていきます。
C言語のファイルなので拡張子として.cをつけることになっています。
micro hello.cを実行するとmicroエディタが起動し、hello.cという新規ファイルを編集するモードに入ってくれます。ここでプログラムを書き、Ctrl-sで保存してCtrl-qで終了します。
Hello, World!を行うプログラムは次のようになります。(儀式なのでコピペじゃなくてちゃんと打ち込んでもらえると僕がうれしい)
実行
code:hello.c
int main() {
printf("Hello, World!\n");
return 0;
}
(注意:最初のhello.cはファイル名なのでソースコードには書かなくて大丈夫です)
ソースコードが書けたら保存して終了してください。
これでプログラムが完成したわけですが、コンピュータはこのプログラムを直接実行するわけではありません。コンピュータが英字を読めるわけがないので。したがって、このプログラムをコンピュータが理解できる2進数の列に翻訳する必要があります。この作業のことをコンパイルと呼びます。
C言語プログラムのコンパイルを行うには環境構築でインストールしたgccコマンドを用います。gccはコンパイラの一種です。 gcc hello.c
こうするとa.outという名前の新しいファイルが生成されているはずです。lsで確認してみましょう。
このa.outがコンピュータで実行可能な2進数列です。実際に表示するときは長くなるので16進数で表記することが多いです。
https://gyazo.com/bab2726e1e9382a167a2535c59085a64
a.outの16進表記の一部分(実際は1000行くらいありました)
さあ、a.outを実行しましょう。
このファイルを実行するには./a.outを実行します。
おめでとうございます!これであなたはようやくC言語に出会うことができました。
ここまでの流れはスムーズに行けば下の図のような感じになっているでしょう。
https://gyazo.com/3924c431efac2b56daceeb8f0f00f0e4
このC言語班では、今Hello, Worldでやったような作業を繰り返してC言語の勉強をしたり実用プログラムを書いたりしていきます。
作業の流れは次の3つの繰り返し
2-1 出力
実行
次に、表示する文字列を好きな文字列に変えてみましょう。
どの部分を変更すれば表示される文字列が変わるでしょうか?
ここまでで試してきたように、プログラムを実行して文字列を出力させるにはprintf関数を使います。
printfが関数名で、括弧の中で指定している文字列を引数(ひきすう)と呼びます。
まとめると、
printf関数に文字列を引数として渡すとそれを標準出力に表示できる
ということになります。
2-2 エスケープシーケンス
文字列の中で末尾につけていた\nは改行文字を示しています。これがなければHello, Worldと表示された行にそのまま次のシェルプロンプトが表示されるか、そもそもHello, Worldの表示が無視されるかのどちらかになるでしょう。
実行
printf("Hello, World!");
この改行文字のような特殊な文字を出力させるときは\(バックスラッシュ、OSや環境によっては円マーク¥)の後に指定したい特殊文字を表す記号文字をつけることで表します。これをエスケープシーケンスと呼びます。
今は\nくらいしかあまり使わないので名前だけ覚えておきましょう。
2-3 フォーマット指定子
printf関数は文字列以外にも数字を出力することもできます。
42を出力させたいときは次のようにします。
実行
printf("%d\n", 42);
文字列の中で%dという識別子を与えていて、もう一つの引数として42を与えていますね。
printf関数は文字列の中で%dという識別子を発見するとその部分に残りの引数を当てはめます。
もう一つの例
実行
printf("%d + %d = %d\n", 1, 100, 101);
このprintfの文字列内で指定する%dのような識別子のことをフォーマット指定子と呼ぶことがあります。
3-1
C言語には変数があります。変数を使うことで値に名前をつけることができます。
次の例は値42にxという変数名をつけて変数xを作成しています。
実行
code:variable.c
int main() {
int x = 42;
}
このint x = 42;のような変数を作る文を変数宣言と呼びます。
intはxの値が32bitの整数であることを示しています。なので32bitの整数であることをよくint型である、などと言うことがあります。他の型については第2回以降で説明していきます。
変数宣言で作った変数はそのまま値として用いることができます。
printf("%d\n", x); => 42
第1週のまとめ
プログラムはコンパイルすると実行できるようになる
コンパイルはgccコマンド、実行は./ファイル名で行う printfの第一引数に文字列を指定するとその文字列を標準出力に出力する
文字列の\nは改行を表す
printfの第一引数の文字列内の%dにint値を当てはめることができる
int hoge = 42;という文を書くと値42に名前hogeを付けることができる 次回までにやってくること
練習問題
好きな数字にnumという変数名をつけ、それを出力してください
挑戦問題(興味がある人はググりながらやってみてね)
端末から数字を入力して表示するプログラムを作成してください
キーワード:標準入力
余談